package com.tmxk.api.days01.zjq;

import java.util.ArrayList;

/**
 *
 */
public class ArrayListDemo<E> {
    public static void main(String[] args) {
        //需求： 一堆数据  1 -7 你好  false  9.99 男

        //集合框架中 所有集合包都是在java。util包下
        ArrayList arrayLists = new ArrayList();
        /**
         * 集合添加元素方法
         * 集合名.add(对象元素);建议使用
         * 集合名.add(下标位置，对象元素);
         * 通过下标位置添加集合元素需注意：指定下标位置必须依次存在(按顺序向下存)
         *
         * Arraylist集合元素中调用add方法时，底层程序自动扩容原理是：
         *      1.当前元素大小是0时，底层自动开辟10个容量大小空间进行数据存储
         *      2.当默认开辟的10个容量大小使用完毕后，会根据当前集合元素的大小自动扩容到1.5倍
         *          底层代码 grow(minCapacity)
         *          private void grow(int minCapacity) {
             *         // overflow-conscious code
             *         int oldCapacity = elementData.length;
             *         int newCapacity = oldCapacity + (oldCapacity >> 1);
             *         if (newCapacity - minCapacity < 0)
             *             newCapacity = minCapacity;
             *         if (newCapacity - MAX_ARRAY_SIZE > 0)
             *             newCapacity = hugeCapacity(minCapacity);
             *         // minCapacity is usually close to size, so this is a win:
             *         elementData = Arrays.copyOf(elementData, newCapacity);
             *     }
         *     3.依次类推，自动扩容的容量大小使用完毕后，再根据当前集合元素的大小自动扩容到1.5倍
         */

        //ArrayList集合元素中调用add方法时，底层程序进行 自动扩容，自动扩容的原理：当前集合元素的大小 + 1
        arrayLists.add(5);
        arrayLists.add(1,-9);
        arrayLists.add(2,"你好");

        //集合获取大小 ： 集合对象名.size;
//        System.out.println(arrayLists);
//
//        System.out.println(arrayLists.size());

        //获取集合对象方法：  集合对象名.get(index);
//        System.out.println("ArrayList中第一个元素："+arrayLists.get(0));
//        System.out.println("ArrayList中第二个元素："+arrayLists.get(1));
//        System.out.println("ArrayList中第三个元素："+arrayLists.get(2));

        //E(集合元素 Element)  T(数据类型 Type) K(键  Key) V(值 Value)


        //判断当前集合元素中是否存在 你好 元素
//        boolean isFind = arrayLists.contains("你好");
//        String message = isFind == true ? "存在该集合元素" : "不存在该集合元素";
//        System.out.println(message);

        //循坏遍历下Arraylist集合元素方式一：使用for i 下标遍历

        System.out.println("ArrayList集合元素遍历方式一 for i");
        for (int i = 0; i <arrayLists.size() ; i++) {
            System.out.println(arrayLists.get(i));
        }


        //删除当前集合元素中1数据
        arrayLists.remove(arrayLists.get(0));


        System.out.println("ArrayList集合元素遍历方式二 foreach");
        for (Object obj: arrayLists ) {
            System.out.println(obj);
        }



        //System.out.println(2>>3);//2按位向右移三位

    }

}
